package com.yeung.swordoffer;

import java.util.Arrays;
import java.util.Comparator;

/**
 * 题目描述
 * 输入一个正整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个。
 * 例如输入数组{3，32，321}，则打印出这三个数字能排成的最小数字为321323。
 * <p>
 * 在进行字符的排序和选择上，我们可以定义一个比较规则：
 * 对于s1和s2，如果s1+s2 < s2+s1，就返回true。换句话说，排序按照使得两个字符串相加较小的次序进行排列。
 */
public class 把数组拍成最小的数 {
    public static void main(String[] args) {

    }

    public String PrintMinNumber(int[] numbers) {
        String[] arr = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            arr[i] = numbers[i] + "";
        }
        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return (o1 + o2).compareTo(o2 + o1);
            }
        });
        StringBuilder sb = new StringBuilder();
        for (String s : arr) {
            sb.append(s);
        }
        return sb.toString();
    }
}
